# mainUI.py
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QVBoxLayout, QHBoxLayout, QWidget, QListWidget, \
    QTextEdit, QSplitter, QSizePolicy
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QFont
from bsort import BSAnimation
from tsp import TSPAnimation


# 创建类 MainWindow 继承自 QMainWindow 类
class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        self.setWindowTitle("软件2246班课设一组———算法可视化系统AVSOne 1.0")
        self.setGeometry(100, 100, 900, 600)  # 设置窗口的大小和位置

        # 1. 创建一个中央Widget
        central_widget = QWidget()
        self.setCentralWidget(central_widget)

        # 2. 创建一个水平布局
        main_layout = QHBoxLayout(central_widget)

        # 3. 创建一个QSplitter，用于控制各部分的大小
        self.splitter = QSplitter(Qt.Horizontal)

        # 左侧菜单选项
        self.menu_list = QListWidget()
        self.menu_list.addItems(
            ["冒泡排序可视化", "TSP旅行商算法可视化", "图着色问题可视化", "哈夫曼树可视化", "最小生成树可视化",
             "汉诺塔可视化"])
        self.menu_list.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
        # 将 menu_list 加入到 splitter 中（应该默认是加在最左边了）
        self.splitter.addWidget(self.menu_list)

        # 中间绘图区域（应该调用冒泡排序的canvas，将其显示到这里）
        self.bsa = BSAnimation()
        self.drawing_area = self.bsa.get_canvas()
        # 将中间区域加入到 splitter中
        self.splitter.addWidget(self.drawing_area)

        # 右侧代码展示区域
        self.code_display = QTextEdit()
        self.code_display.setPlainText("# 在此处显示代码")
        self.code_display.setStyleSheet("font-family: Courier; font-size: 14px;")
        self.code_display.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
        self.splitter.addWidget(self.code_display)

        # 设置各部分的比例
        self.splitter.setSizes([180, 550, 170])  # 根据比例进行调整

        # 将QSplitter添加到布局中
        main_layout.addWidget(self.splitter)

        # 绑定菜单选项点击事件
        self.menu_list.itemClicked.connect(self.menu_item_clicked)

    def menu_item_clicked(self, item):
        if item.text() == "冒泡排序可视化":
            self.display_bubble_sort()
            self.display_code()
        elif item.text() == "TSP旅行商算法可视化":
            self.display_tsp()
        elif item.text() == "图着色问题可视化":
            pass

    def display_bubble_sort(self):
        self.drawing_area.figure.clf()
        self.drawing_area.draw()
        self.bsa.begin_animation()

    def display_code(self):
        pass

    # 显示旅行商问题算法可视化
    def display_tsp(self):
        # 清除 canvas 上的内容
        self.drawing_area.figure.clf()
        self.drawing_area.draw()

        self.tsp = TSPAnimation(self.drawing_area, num_cities=10)
        self.tsp.begin_animation()



def main():
    app = QApplication(sys.argv)

    window = MainWindow()
    window.show()

    sys.exit(app.exec_())


if __name__ == "__main__":
    main()
